﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Ribbon;
using DevExpress.Xpf.Bars;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Printing;
using System.Reflection;
using ThanNhanTao.Server;
using System.Windows.Markup;
using ThanNhanTao.Report;
using DevExpress.Xpf.Editors.Settings;
using System.Resources;
using System.Collections;
using ThanNhanTao.CommonControl;
using DevExpress.Data.Filtering;
using System.Configuration;
using ThanNhanTao.Properties;
using ThanNhanTao.UC;
using ThanNhanTao.Server.BLL;
using ThanNhanTao.Server.Enum;


namespace ThanNhanTao
{
    public partial class MainWindow : DXRibbonWindow
    {
        DateTime ngayLamViec;
        //private static List<BenhNhan> bn;
        private static List<LuuBNInDto> listBnIn;
        PhieuBenhNhanBll phieuBenhNhanbll;
        Dm_YeuCauBLL dmYeuCauBLL;
        public ucThongKeBenhAnMainForm ucThongKeBenhAnMainForm { get; set; } 

        public MainWindow()
        {
            try
            {
                InitializeComponent();
                dmYeuCauBLL = new Dm_YeuCauBLL();
                tnThongBao.Content = getNgayThangNam();
                ngayLamViec = DateTime.Now;
                ThanNhanTaoGlobal.NgayLamViec = ngayLamViec;
                ThanNhanTaoGlobal.IdBenhNhanXoa = -1;
                ThanNhanTaoGlobal.NumBerSoLanChayThan = -1;
                listBnIn = new List<LuuBNInDto>();
                phieuBenhNhanbll = new PhieuBenhNhanBll();
                //LayDanhSachLuuVetDuaVaoList();
                //getListBenhNhan();
                GridBenhNhan.KeyUp += new KeyEventHandler(GridBenhNhanView_KeyUp);
                dteNgayLamViec.EditValue = ngayLamViec;
                
                //Truyền form hiện tại vào Global
                ThanNhanTaoGlobal.MainWinDowTemp = this;
                ThanNhanTaoGlobal.SLBenhNhanDangDieuTri = TongSoBNDangDieuTri();
                ThanNhanTaoGlobal.SLBenhNhanDaXuatVien = TongSoBNDaXuatVien();
                ThanNhanTaoGlobal.SetThongTinChungFormMain();
            }
            catch(Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

        private void DXRibbonWindow_Loaded(object sender, RoutedEventArgs e)
        {
            BindCauHinhVaThongBaoHanBHYT(); //Cấu hình và thông báo những bệnh nhân sắp hết hạn BHYT
        }

        private int TongSoBNDangDieuTri()
        {
            DateTime ngayHienTai = DateTime.UtcNow;
            return (from a in ThanNhanTaoGlobal.DanhSachBenhNhan
                    where (a.NgayRaVien == null || (a.NgayRaVien.Value > ngayHienTai && a.NgayVaoVien.Value <= ngayHienTai))
                    select a).Count();
        }

        private int TongSoBNDaXuatVien()
        {
            DateTime ngayHienTai = DateTime.UtcNow;
            return (from a in ThanNhanTaoGlobal.DanhSachBenhNhan
                    where (a.NgayRaVien != null && a.NgayRaVien.Value <= ngayHienTai)
                    select a).Count();
        }

        public void BindCauHinhVaThongBaoHanBHYT()
        { 
            if (Settings.Default.HienThiCauHinhHanBHYT)
            {
                frmCauHinhHanBHYT cauHinh = new frmCauHinhHanBHYT();
                cauHinh.ShowDialog();
            }
            if (Settings.Default.HienThiDanhSachHetHanBHYT)
            {
                frmThongBaoHanBHYT thongBao = new frmThongBaoHanBHYT(this);
                if (thongBao.listBNDangDieuTri.Count > 0)
                    thongBao.ShowDialog();
            }
        }

        private void BarManager_ItemClick(object sender, ItemClickEventArgs e)
        {
            CallFormButton(e.Item.Name);
        }

        void CallFormButton(string btnName)
        {
            try
            {
                BenhNhan benhNhan =null;
                if (GridBenhNhan.View.FocusedRowHandle != GridControl.InvalidRowHandle
                && GridBenhNhan.View.FocusedRowHandle != GridControl.AutoFilterRowHandle
                && GridBenhNhan.View.FocusedRowHandle != GridControl.NewItemRowHandle)
                {
                    benhNhan = GridBenhNhan.GetFocusedRow() as BenhNhan;
                }
                switch (btnName)
                {
                    case "btnThoat":
                        base.Close();
                        break;
                    case "btnThemMoi":
                        frmPhieuBenhNhan frmPhieuBenhNhanNew = new frmPhieuBenhNhan(this);
                        frmPhieuBenhNhanNew.Owner = this;
                        frmPhieuBenhNhanNew.ShowDialog();
                        break;
                    case "btnPhieuNgoaiTru":
                        try
                        {
                            frmThanhToanNgoaiTru frmChiDinhNgoaiTru = new frmThanhToanNgoaiTru(benhNhan);
                            frmChiDinhNgoaiTru.Owner = this;
                            frmChiDinhNgoaiTru.ShowDialog();
                        }
                        catch
                        {
                        }
                        break;
                    case "btnPhieuNoiTru":
                        try
                        {
                            frmThanhToanNoiTru frmChiDinhNoiTru = new frmThanhToanNoiTru(benhNhan);
                            frmChiDinhNoiTru.Owner = this;
                            frmChiDinhNoiTru.ShowDialog();
                        }
                        catch
                        {
                        }
                        //CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTru();
                        //getListBenhNhan();
                        CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTruTuDaTaBase();
                        getListBenhNhanLayTuDataBase();
                        break;
                   case "btnPhieuChayThan":
                        BenhNhan bnTemple = (BenhNhan)GridBenhNhan.GetFocusedRow();
                        if (bnTemple != null)
                        {
                            frmPhieuChayThan frmChayThan = new frmPhieuChayThan(bnTemple);
                            frmChayThan.Owner = this;
                            frmChayThan.ShowDialog();
                        }
                        else
                        {
                            DXMessageBox.Show("Xin hãy chọn bệnh nhân.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        }
                        //CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTru();
                        //getListBenhNhan();
                        CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTruTuDaTaBase();
                        getListBenhNhanLayTuDataBase();
                        break;
                   case "btnDmYeuCau":
                        frmDmYeuCau frmDmYeuCau = new frmDmYeuCau();
                        frmDmYeuCau.ShowDialog();
                        break;
                   case "btnDmLoaiYeuCau":
                        frmDmLoaiYeuCau frmDmLoaiYeuCau = new frmDmLoaiYeuCau();
                        frmDmLoaiYeuCau.ShowDialog();
                        break;
                   case "btnDmNgheNghiep":
                        frmDmNgheNghiep dmNgheNghiep = new frmDmNgheNghiep();
                        dmNgheNghiep.ShowDialog();
                        break;
                   case "btnDmChanDoan":
                        frmDmChanDoan dmChanDoan = new frmDmChanDoan();
                        dmChanDoan.ShowDialog();
                        break;
                   case "btnRefresh":
                        try
                        {
                            //getListBenhNhan();
                            getListBenhNhanLayTuDataBase();
                        }
                        catch { }
                        break;
                   case "btnThongKeTongSoLanChay":
                        frmThongKeTongSoLanChay soLanChay = new frmThongKeTongSoLanChay();
                        soLanChay.ShowDialog();
                        break;
                   case "btnThongKeTenVaTongBenhNhan":
                        frmThongKeTongBNChayThan frmTongBNChay = new frmThongKeTongBNChayThan();
                        frmTongBNChay.ShowDialog();
                        break;
                   case "btnThongKeBNDungThuoc":
                        frmThongKeTongBNDungThuoc frmTongBNDungThuoc = new frmThongKeTongBNDungThuoc();
                        frmTongBNDungThuoc.ShowDialog();
                        break;
                   case "btnThongKeBenhNhan":
                        frmThongKeBenhNhan frmThongKeBenhNhan = new frmThongKeBenhNhan();
                        frmThongKeBenhNhan.ShowDialog();
                        break;
                   case "btnCauHinhHanBHYT":
                        frmCauHinhHanBHYT hanBHYT = new frmCauHinhHanBHYT();
                        hanBHYT.ShowDialog();
                        break;
                   case "btnSaoLuuPhucHoiDuLieu":
                        frmSaoLuuPhucHoiDuLieu frmSaoLuuPhucHoi = new frmSaoLuuPhucHoiDuLieu();
                        frmSaoLuuPhucHoi.ShowDialog();
                        break;
                   case "btnCauHinhConnectSQL":
                        frmConnecSQL frmConSql = new frmConnecSQL();
                        frmConSql.ShowDialog();
                        break;
                   case "btnThongBaoHanBHYT":
                        frmThongBaoHanBHYT thongBao = new frmThongBaoHanBHYT(this);
                        thongBao.ShowDialog();
                        break;
                   case "btnThongKeDanhSachDeNghiThanhToanNgoaiTruMau25A":
                        frmThongKeDanhSachDeNghiThanhToanMau25A thongKe = new frmThongKeDanhSachDeNghiThanhToanMau25A();
                        thongKe.ShowDialog();
                        break;
                   case "btnThongKeBenhNhanRaVaoKhoa":
                        frmThongKeBenhNhanRaVaoKhoa thongKeBenhNhanRaVaoKhoa = new frmThongKeBenhNhanRaVaoKhoa();
                        thongKeBenhNhanRaVaoKhoa.ShowDialog();
                        break;
                        
                   case "btnInPhieuThongTinNhanSu":
                        ReportCommonWindow inPhieu = new ReportCommonWindow(new rptPhieuThongTinHoSoCongChucVienChuc());
                        inPhieu.ShowDialog();
                        break;
                   case "btnThemNhanSu":
                        frmPhieuThongTinHoSoCongChucVienChuc themNhanSu = new frmPhieuThongTinHoSoCongChucVienChuc();
                        themNhanSu.ShowDialog();
                        break;
                   case "btnAbout":
                        About about = new About();
                        about.ShowDialog();
                        break;
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

        #region cac ham vulh
        
        private string getNgayThangNam()
        {
            string[] ngay = { "chúa nhật", "hai", "ba", "tư", "năm", "sáu", "bảy" };
            int i = (int)DateTime.Now.DayOfWeek;
            return " Thứ " + ngay[i] + ", ngày " + DateTime.Now.Day + " tháng "
                                              + DateTime.Now.Month + " năm " + DateTime.Now.Year;
        }

       private void getListBenhNhan()
        {
            try
            {
                if (ThanNhanTaoGlobal.DanhSachBenhNhan == null || ThanNhanTaoGlobal.DanhSachBenhNhan.Count <= 0)
                {
                    ThanNhanTaoGlobal.DanhSachBenhNhan = new List<BenhNhan>();
                    ThanNhanTaoGlobal.DanhSachBenhNhan = phieuBenhNhanbll.GetListBenhNhan();
                }
                LuuBNInDto luuTmpleteT;
                for (int i = 0; i < ThanNhanTaoGlobal.DanhSachBenhNhan.Count; i++)
                {
                    luuTmpleteT = new LuuBNInDto();
                    ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "";
                    luuTmpleteT = LayDanhSachLuuVetList(ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan);
                    if (luuTmpleteT != null)
                    {
                        ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "YES";
                    }
                }
                GridBenhNhan.ItemsSource = ThanNhanTaoGlobal.DanhSachBenhNhan;
            }
            catch { }
        }

       private void getListBenhNhanLayTuDataBase()
       {
           try
           {
               ThanNhanTaoGlobal.SLBenhNhanDangDieuTri = 0;
               ThanNhanTaoGlobal.SLBenhNhanDaXuatVien = 0;
               if (ThanNhanTaoGlobal.DanhSachBenhNhan == null || ThanNhanTaoGlobal.DanhSachBenhNhan.Count <= 0)
               {
                   ThanNhanTaoGlobal.DanhSachBenhNhan = new List<BenhNhan>();
                   ThanNhanTaoGlobal.DanhSachBenhNhan = phieuBenhNhanbll.GetListBenhNhan();
               }
               for (int i = 0; i < ThanNhanTaoGlobal.DanhSachBenhNhan.Count; i++)
               {
                   if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].HemosolCitrat.Contains(ThanNhanTaoGlobal.NgayLamViec.ToString("MM/dd/yyyy")))
                   {
                       ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "YES";
                   }
                   else
                   {
                       ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "";
                   }
                   if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].NgayRaVien == null 
                       || ThanNhanTaoGlobal.DanhSachBenhNhan[i].NgayRaVien.Value.CompareTo(DateTime.Now)>=0)
                   {
                       ThanNhanTaoGlobal.SLBenhNhanDangDieuTri += 1;
                   }
                   else
                   {
                       ThanNhanTaoGlobal.SLBenhNhanDaXuatVien += 1;
                   }
               }
               GridBenhNhan.ItemsSource = ThanNhanTaoGlobal.DanhSachBenhNhan.OrderBy(c=>c.Ten);
               GetThongKeBenhAn();
           }
           catch {
               DXMessageBox.Show("Lấy danh sách bệnh nhân không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
           }
       }
        
       private void LayDanhSachLuuVetDuaVaoList()
       {
           try
           {
               ResourceReader reader = new ResourceReader("BenhNhanDaIn.resources");
               IDictionaryEnumerator en = reader.GetEnumerator();
               while (en.MoveNext())
               {
                   listBnIn.Add((LuuBNInDto)en.Value);
               }
               reader.Close();
           }
           catch
           {
           }

       }

        public void AddBenhNhanGrid(BenhNhan benhNhanNew)
        {
            //bn.Add(benhNhanNew);
            //GridBenhNhan.ItemsSource = bn;
            //GridBenhNhan.RefreshData();
            try
            {
                //getListBenhNhan();
                ThanNhanTaoGlobal.DanhSachBenhNhan.Add(benhNhanNew);
                getListBenhNhanLayTuDataBase();
                int indexRowS = ThanNhanTaoGlobal.DanhSachBenhNhan.OrderBy(c=>c.Ten).ToList().FindIndex(c => c.IdBenhNhan == benhNhanNew.IdBenhNhan);
                TableView tbv = (TableView)GridBenhNhan.View;
                tbv.SelectRow(indexRowS);
                tbv.FocusedRowHandle = indexRowS;
                GridBenhNhan.RefreshRow(indexRowS);
            }
            catch { }
        }
        public void UpDateBenhNhanGrid(BenhNhan benhNhanNew)
        {
            //DeleBenhNhan(benhNhanNew.IdBenhNhan);
            //AddBenhNhanGrid(benhNhanNew);
            try
            {
                //getListBenhNhan();
                int indexRow=ThanNhanTaoGlobal.DanhSachBenhNhan.FindIndex(c=>c.IdBenhNhan==benhNhanNew.IdBenhNhan);
                ThanNhanTaoGlobal.DanhSachBenhNhan.RemoveAt(indexRow);
                ThanNhanTaoGlobal.DanhSachBenhNhan.Insert(indexRow,benhNhanNew);
                getListBenhNhanLayTuDataBase();
                TableView tbv = (TableView)GridBenhNhan.View;
                indexRow = indexRow + 1;
                tbv.SelectRow(indexRow);
                tbv.FocusedRowHandle = indexRow;
                GridBenhNhan.RefreshRow(indexRow);
            }
            catch { }
        }
        public void DeleBenhNhan(int idBenhNhan)
        {
            for (int i = 0; i < ThanNhanTaoGlobal.DanhSachBenhNhan.Count; i++)
            {
                if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan == idBenhNhan)
                {
                    SetSoLuongBenhNhanDieuTriHoacXuatVienDelete(ThanNhanTaoGlobal.DanhSachBenhNhan[i].NgayRaVien);
                    ThanNhanTaoGlobal.DanhSachBenhNhan.Remove(ThanNhanTaoGlobal.DanhSachBenhNhan[i]);
                    break;
                }
            }
            GridBenhNhan.RefreshData();
        }

        private void SetSoLuongBenhNhanDieuTriHoacXuatVienDelete(DateTime ? ngayXuatVien)
        {
            if (ngayXuatVien == null || (ngayXuatVien.Value > DateTime.Now))
            {
                ThanNhanTaoGlobal.SLBenhNhanDangDieuTri -= 1;
            }
            else
            {
                ThanNhanTaoGlobal.SLBenhNhanDaXuatVien -= 1;
            }
            ThanNhanTaoGlobal.SetThongTinChungFormMain();
        }

        private void GridBenhNhan_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (e.RightButton == MouseButtonState.Pressed) return;
            if (GridBenhNhan.View.GetRowHandleByMouseEventArgs(e) != GridControl.InvalidRowHandle
                && GridBenhNhan.View.GetRowHandleByMouseEventArgs(e) != GridControl.AutoFilterRowHandle
                && GridBenhNhan.View.GetRowHandleByMouseEventArgs(e) != GridControl.NewItemRowHandle)
            {
                BenhNhan bnClick =(BenhNhan)GridBenhNhan.GetFocusedRow();
                frmPhieuBenhNhan frmUp = new frmPhieuBenhNhan(this,bnClick);
                frmUp.ShowDialog();
            }
        }

        private void GridBenhNhanView_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter)
                {
                    BenhNhan bnClick = (BenhNhan)GridBenhNhan.GetFocusedRow();
                    frmPhieuBenhNhan frmUp = new frmPhieuBenhNhan(this, bnClick);
                    frmUp.ShowDialog();
                }
            }
            catch
            {
            }
        }

        private void TableView_ShowGridMenu(object sender, GridMenuEventArgs e)
        {
            // Check whether this event was raised for a column's context menu.
            if (e.MenuType != GridMenuType.RowCell) return;

            BenhNhan rowSelect = GridBenhNhan.GetFocusedRow() as BenhNhan;
            if (rowSelect == null)
                return;

            bool visibleContextMenu = Convert.ToBoolean(ConfigurationManager.AppSettings["VisibleContextMenu"].ToString());
            List<Dm_YeuCau> listYeuCauChayThan = dmYeuCauBLL.RetrieveAllDmYeuCauChayThan().Where(u => u.KichHoat).ToList();
            if (!visibleContextMenu)
            {
                if (!string.IsNullOrEmpty(rowSelect.SoNhapVien))
                {
                    string maNVNgoaiTru1 = ConfigurationManager.AppSettings["MaNVNgoaiTru1"].ToString();
                    string maNVNgoaiTru2 = ConfigurationManager.AppSettings["MaNVNgoaiTru2"].ToString();
                    // Trường hợp là bệnh nhân ngoại trú: Lấy chạy thận cả nội và ngoại + chỉ ngoại
                    if (rowSelect.SoNhapVien.EndsWith(maNVNgoaiTru1, StringComparison.OrdinalIgnoreCase) || rowSelect.SoNhapVien.EndsWith(maNVNgoaiTru2, StringComparison.OrdinalIgnoreCase))
                    {
                        listYeuCauChayThan = listYeuCauChayThan.Where(u => (u.ChoNgoaiTru && u.ChoNoiTru) || (u.ChoNgoaiTru && !u.ChoNoiTru)).ToList();
                    }
                    else // Trường hợp là bệnh nhân nội trú: Lấy chạy thận cả nội và ngoại + chỉ nội
                    {
                        listYeuCauChayThan = listYeuCauChayThan.Where(u => (u.ChoNgoaiTru && u.ChoNoiTru) || (!u.ChoNgoaiTru && u.ChoNoiTru)).ToList();
                    }
                }
            }
            else // Đối với trưởng hợp cấu hình cho phép hiển thị tất cả các context menu thì hiển thị các chỉ định chạy thận nội trú và ngoại trú
            {
                listYeuCauChayThan = listYeuCauChayThan.Where(u => u.ChoNgoaiTru && u.ChoNoiTru).ToList();
            }
            foreach (var item in listYeuCauChayThan)
            {
                // Create a custom menu item and add it to the context menu.
                BarButtonItem bi = new BarButtonItem();
                bi.Name = item.MaYeuCau;
                bi.Content = item.TenYeuCau;
                bi.ItemClick += new ItemClickEventHandler(CustomItemChuotPhaiChayThan_ItemClick);
                e.Customizations.Add(bi);
            }
        }

        private void CustomItemChuotPhaiChayThan_ItemClick(object sender, ItemClickEventArgs e)
        {
            BarButtonItem item = sender as BarButtonItem;
            RightClickChayThan(item.Name);
        }

        private void BarButtonItemPhieuChayThan_ItemClick(object sender, ItemClickEventArgs e)
        {
            RightClickChayThan(ConfigurationManager.AppSettings["RightClick1"].ToString());
        }

        private void RightClickChayThan(string maYeuCau)
        {
            try
            {
                // Lấy thông tin từ Dm_YeuCau về chạy thận
                Dm_YeuCau dmYeuCauChayThan = dmYeuCauBLL.GetIdDmYeuCau(maYeuCau);
                if (dmYeuCauChayThan == null)
                {
                    DXMessageBox.Show("Không tìm thấy thông tin chạy thận", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }

                SelectedRowsCollection rowSelect;
                BenhNhan printItemBN;
                rowSelect = ((TableView)GridBenhNhan.View).SelectedRows;
                //string thongBao = "";
                //dsBenhNhanIn = new ResourceWriter("BenhNhanDaIn.resources");
                foreach (BenhNhan bno in rowSelect.ToList())
                {
                    printItemBN = new BenhNhan();
                    printItemBN = bno;//(BenhNhan)GridBenhNhan.GetFocusedRow();
                    if (bno.NgayRaVien != null)
                    {
                        if (bno.NgayRaVien.Value.CompareTo(DateTime.Now) <= 0)
                        {
                            DXMessageBox.Show("Bệnh nhân " + bno.Ho + " " + bno.Ten + "( " + bno.SoNhapVien + " )" +
                                               "\n đã ra viện ngày " + bno.NgayRaVien.Value.ToString("dd/MM/yyyy H:mm"), "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                            continue;
                        }
                    }

                    // Bước kiểm tra đã chọn đúng loại chạy thận chưa. Bao gồm 2 loại: ngoại trú và nội trú
                    //if (!string.IsNullOrEmpty(bno.SoNhapVien))
                    //{
                    //    string rightClick2 = ConfigurationManager.AppSettings["RightClick2"].ToString();
                    //    string rightClick3 = ConfigurationManager.AppSettings["RightClick3"].ToString();
                    //    string rightClick4 = ConfigurationManager.AppSettings["RightClick4"].ToString();
                    //    string rightClick5 = ConfigurationManager.AppSettings["RightClick5"].ToString();
                    //    string maNVNgoaiTru1 = ConfigurationManager.AppSettings["MaNVNgoaiTru1"].ToString();
                    //    string maNVNgoaiTru2 = ConfigurationManager.AppSettings["MaNVNgoaiTru2"].ToString();
                        
                    //    // Trường hợp là bệnh nhân ngoại trú
                    //    if (bno.SoNhapVien.EndsWith(maNVNgoaiTru1, StringComparison.OrdinalIgnoreCase) || bno.SoNhapVien.EndsWith(maNVNgoaiTru2, StringComparison.OrdinalIgnoreCase))
                    //    {
                    //        // Kiểm tra đối với click chuột phải không chọn ngoại trú
                    //        if (maYeuCau != rightClick4 && maYeuCau != rightClick5)
                    //        {
                    //            DXMessageBox.Show("Chọn sai loại chạy thận đối với bệnh nhân này", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    //            continue;
                    //        }    
                    //    }
                    //    else // Trường hợp là bệnh nhân nội trú
                    //    {
                    //        // Kiểm tra đối với click chuột phải không chọn nội trú
                    //        if (maYeuCau != rightClick2 && maYeuCau != rightClick3)
                    //        {
                    //            DXMessageBox.Show("Chọn sai loại chạy thận đối với bệnh nhân này", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    //            continue;
                    //        }   
                    //    }
                    //}

                    //if (printItemBN.MLTPE2000.Equals("YES"))
                    //{
                    //    thongBao = thongBao + "\n" + printItemBN.SoNhapVien + "-" +printItemBN.Ho + " " + printItemBN.Ten;
                    //    continue;
                    //}
                    //else
                    //{
                    //printItemBN.MLTPE2000 = "YES";
                    //listBnIn.Add(new LuuBNInDto { idBenhNhan = printItemBN.IdBenhNhan, ngayHienTai = DateTime.Now, ngayLamViec = ThanNhanTaoGlobal.NgayLamViec });
                    //}

                    if (printItemBN != null)
                    {
                        SetDsPhieuChayThanMainForm(printItemBN, dmYeuCauChayThan);
                    }
                    if (ThanNhanTaoGlobal.NumBerSoLanChayThan == -2)
                    {
                        printItemBN.MLTPE2000 = "";
                    }
                    else
                    {
                        printItemBN.MLTPE2000 = "YES";
                        foreach (BenhNhan bnT in ThanNhanTaoGlobal.DanhSachBenhNhan)
                        {
                            if (bnT.IdBenhNhan == printItemBN.IdBenhNhan)
                            {
                                printItemBN.HemosolCitrat = bnT.HemosolCitrat + ThanNhanTaoGlobal.NgayLamViec.ToString("MM/dd/yyyy") + "=";
                                break;
                            }
                        }
                    }
                    phieuBenhNhanbll.UpdateColumnNgayChayThan(printItemBN);
                    int indexRowS = ThanNhanTaoGlobal.DanhSachBenhNhan.FindIndex(c => c.IdBenhNhan == bno.IdBenhNhan);
                    TableView tbv = (TableView)GridBenhNhan.View;
                    tbv.SelectRow(indexRowS);
                    GridBenhNhan.RefreshRow(indexRowS);
                    //if(ThanNhanTaoGlobal.NumBerSoLanChayThan==-2)
                    //{
                    //    printItemBN.MLTPE2000 = "";
                    //}
                    //GridBenhNhan.RefreshRow(ThanNhanTaoGlobal.DanhSachBenhNhan.Count - 1);
                }
                //for (int i = 0; i < listBnIn.Count; i++)
                //{
                //    GhiFileLuuDauVetList(i, listBnIn[i].idBenhNhan, listBnIn[i].ngayLamViec);
                //}
                // dsBenhNhanIn.Generate();
                //dsBenhNhanIn.Close();
                //if (!string.IsNullOrEmpty(thongBao))
                //{
                //DXMessageBox.Show("Chức năng này đã được sử dụng cho bệnh nhân \n" + thongBao, "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                // }
                //getListBenhNhanLayTuDataBase();
                ThanNhanTaoGlobal.NumBerSoLanChayThan = -1;
            }
            catch (Exception)
            {
                DXMessageBox.Show("Chạy thận không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void BarButtonItemPhieuChayThanNoiTruUyBan_ItemClick(object sender, ItemClickEventArgs e)
        {
            RightClickChayThan(ConfigurationManager.AppSettings["RightClick2"].ToString());
        }

        private void BarButtonItemPhieuChayThanNoiTruGopVon_ItemClick(object sender, ItemClickEventArgs e)
        {
            RightClickChayThan(ConfigurationManager.AppSettings["RightClick3"].ToString());
        }

        private void BarButtonItemPhieuChayNgoaiTruUyBan_ItemClick(object sender, ItemClickEventArgs e)
        {
            RightClickChayThan(ConfigurationManager.AppSettings["RightClick4"].ToString());
        }

        private void BarButtonItemPhieuChayNgoaiTruGopVon_ItemClick(object sender, ItemClickEventArgs e)
        {
            RightClickChayThan(ConfigurationManager.AppSettings["RightClick5"].ToString());
        }

        #region ham chay chuc nang in phieu chay than tu menu tai grid

        private PhieuChayThanBll benhNhanBLL;
        private void SetDsPhieuChayThanMainForm(BenhNhan bnBenhNhanIn, Dm_YeuCau dmYeuCau)
        {
            PhieuChayThanBll benhNhanBLL = new PhieuChayThanBll();
            try
            {
                List<PhieuChayThanDto> dsPhieu = new List<PhieuChayThanDto>();
                int lanChayNew = benhNhanBLL.GetLanChay(bnBenhNhanIn.IdBenhNhan);
                if(lanChayNew==0)
                {
                    frmNhapSoChayThan frmSoChayThan = new frmNhapSoChayThan(bnBenhNhanIn.Ho + " " + bnBenhNhanIn.Ten);
                    frmSoChayThan.ShowDialog();
                }
                if(ThanNhanTaoGlobal.NumBerSoLanChayThan>=0)
                {
                    lanChayNew = ThanNhanTaoGlobal.NumBerSoLanChayThan;
                }
                if (ThanNhanTaoGlobal.NumBerSoLanChayThan==-2)
                {
                   // listBnIn.RemoveAt(listBnIn.FindIndex(c => c.idBenhNhan == bnBenhNhanIn.IdBenhNhan
                     //                                    && c.ngayLamViec.ToShortDateString().Equals(ThanNhanTaoGlobal.NgayLamViec.ToShortDateString())==true));
                    return;
                }
                int chayToiDa = lanChayNew + 1;
                int idMaxLanChayThanDB = benhNhanBLL.GetMaxIDChayThan();
                int idMaxChiDinh = benhNhanBLL.GetMaxIDChiDinh();
                //Dm_YeuCau dmYeuCau = benhNhanBLL.GetListYeuCau().FirstOrDefault();//Single(c => c.TenYeuCau.Contains("Chạy thận"));
                string rightClick2 = ConfigurationManager.AppSettings["RightClick2"].ToString();
                string rightClick3 = ConfigurationManager.AppSettings["RightClick3"].ToString();
                bool LaNoiTru = false;
                if (dmYeuCau.MaYeuCau.Equals(rightClick2) || dmYeuCau.MaYeuCau.Equals(rightClick3))
                {
                    LaNoiTru = true;
                }

                for (int i = lanChayNew; i < chayToiDa; i++)
                {
                    dsPhieu.Add(new PhieuChayThanDto
                    {
                        LanChay = i + 1,
                        NgayChay = ThanNhanTaoGlobal.NgayLamViec,
                        NgayIn = ThanNhanTaoGlobal.NgayLamViec.ToShortDateString(),
                        hoBN = bnBenhNhanIn.Ho + " " + bnBenhNhanIn.Ten,
                        tuoi = bnBenhNhanIn.Tuoi.ToString(),
                        ChanDoan = bnBenhNhanIn.Dm_ChanDoan !=null?bnBenhNhanIn.Dm_ChanDoan.TenChanDoan:"",
                        obChayThanNhanTao = new ChayThanNhanTao
                        {
                            IdChayThanNhanTao = idMaxLanChayThanDB + 1,
                            IdBenhNhan = bnBenhNhanIn.IdBenhNhan,
                            SoLan = i + 1,
                            NgayChay = ThanNhanTaoGlobal.NgayLamViec,
                            DichChay = null
                        },
                        obChiDinh = new ChiDinh
                        {
                            IdChiDinh = idMaxChiDinh + 1,
                            MaYeuCau = dmYeuCau.MaYeuCau,
                            MaDonViTinh = dmYeuCau.MaDonViTinh,
                            ChoNoiTru = LaNoiTru,//bnBenhNhanIn.LoaiHoSo == EnumLoaiHoSo.HSNoiTru ? true : false,
                            LaChayThan = true,
                            SoLuong = 1,
                            IdBenhNhan = bnBenhNhanIn.IdBenhNhan,
                            IdChayThanNhanTao = idMaxLanChayThanDB,
                            NgayYeuCau = ThanNhanTaoGlobal.NgayLamViec,
                            GiaYeuCau = dmYeuCau.GiaYeuCau,
                            QuyBHYT = 0,
                            GiaKhac = 0,
                        },
                        delete = false
                    });
                }
                LuuPhieuChayThanMainFrom(dsPhieu, bnBenhNhanIn.IdBenhNhan, lanChayNew, ngayLamViec, dmYeuCau);
                ThanNhanTaoGlobal.NumBerSoLanChayThan = -1;
            }
            catch
            {
                //DXMessageBox.Show("Dữ liệu bị gián đoạn.\nXin vui lòng thực hiện lại.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
        private void LuuPhieuChayThanMainFrom(List<PhieuChayThanDto> dsPhieu, int idBenhNhan, int lanChayTruoc, DateTime NgayChay, Dm_YeuCau dmYeuCau)
        {
            benhNhanBLL = new PhieuChayThanBll();
            try
            {
                foreach (PhieuChayThanDto phieuct in dsPhieu)
                {
                    phieuct.obChayThanNhanTao.SoLan = lanChayTruoc + 1;
                    phieuct.obChayThanNhanTao.NgayChay = NgayChay;
                    phieuct.obChiDinh.NgayYeuCau = NgayChay;
                    benhNhanBLL.AddPhieuChayThan(phieuct.obChayThanNhanTao, phieuct.obChiDinh);
                }
                //PrintPhieuChayThan(dsPhieu);
            }
            catch
            {
            }
            
        }
        private void PrintPhieuChayThan(List<PhieuChayThanDto> dsPhieu)
        {
            rptPhieuChayThan rptChay = new rptPhieuChayThan();
            rptChay.SetThongTinHeader(dsPhieu[0].hoBN, dsPhieu[0].tuoi, dsPhieu[0].NgayChay, dsPhieu[0].LanChay, dsPhieu[0].ChanDoan);
            dsPhieu.RemoveAt(0);
            rptChay.DataSource = dsPhieu;
            rptChay.SetThongTin();
            rptChay.ShowPreviewDialog();
        }

        #endregion

        private void dteNgayLamViec_EditValueChanged(object sender, RoutedEventArgs e)
        {
            try
            {
                ngayLamViec = Convert.ToDateTime(dteNgayLamViec.EditValue.ToString());
                ThanNhanTaoGlobal.NgayLamViec = ngayLamViec;
                //getListBenhNhan();
                getListBenhNhanLayTuDataBase();
            }
            catch 
            {
                dteNgayLamViec.EditValue = DateTime.Now;
            }
        }

        private void GetThongKeBenhAn()
        {
            ThanNhanTaoGlobal.MainWindowCommon = this;
            if (ucThongKeBenhAnMainForm == null)
                staticItemThongTinChung.ContentTemplate.LoadContent();
            else
                ucThongKeBenhAnMainForm.GetDanhSachThongKeBenhAn();
        }

        ResourceWriter dsBenhNhanIn;
        private void GhiFileLuuDauVet(string idBenhNhan,string ngayDaIn)
        {
            dsBenhNhanIn.AddResource(idBenhNhan, ngayDaIn);
        }

        private void GhiFileLuuDauVetList(int idList,int idBenhNhanT,DateTime ngayLamViecTemple)
        {
            dsBenhNhanIn.AddResource(idList.ToString(), new LuuBNInDto { idBenhNhan = idBenhNhanT, ngayHienTai = DateTime.Now, ngayLamViec = ngayLamViecTemple });
        }

        private string LayDanhSachLuuVet(string idBenhNhan)
        {
            try
            {
                string ngayChay = "";
                ResourceReader reader = new ResourceReader("BenhNhanDaIn.resources");
                IDictionaryEnumerator en = reader.GetEnumerator();
                while (en.MoveNext())
                {
                    if(en.Key.ToString().Equals(idBenhNhan))
                    {
                        ngayChay = en.Value.ToString();
                        break;
                    }
                }
                reader.Close();
                return ngayChay;
            }
            catch
            {
                return "";
            }
          
        }

        private LuuBNInDto LayDanhSachLuuVetList(int idBenhNhanList)
        {
            LuuBNInDto luuTemplete = new LuuBNInDto();
            try
            {
                if (listBnIn != null || listBnIn.Count > 0)
                {
                    foreach (LuuBNInDto luuBN in listBnIn)
                    {
                        if (luuBN.idBenhNhan.Equals(idBenhNhanList)
                            && luuBN.ngayHienTai.ToShortDateString().Equals(DateTime.Now.ToShortDateString())
                            && luuBN.ngayLamViec.ToShortDateString().Equals(ThanNhanTaoGlobal.NgayLamViec.ToShortDateString()))
                        {
                            return luuBN;
                        }
                    }
                }
                else
                {
                    ResourceReader reader = new ResourceReader("BenhNhanDaIn.resources");
                    IDictionaryEnumerator en = reader.GetEnumerator();
                    while (en.MoveNext())
                    {
                        luuTemplete = (LuuBNInDto)en.Value;
                        if (luuTemplete.idBenhNhan.Equals(idBenhNhanList)
                            && luuTemplete.ngayHienTai.ToShortDateString().Equals(DateTime.Now.ToShortDateString())
                            && luuTemplete.ngayLamViec.ToShortDateString().Equals(ThanNhanTaoGlobal.NgayLamViec.ToShortDateString()))
                        {
                            return luuTemplete;
                        }

                    }
                    reader.Close();
                    return null;
                }
            }
            catch
            {
                return null;
            }
            return null;

        }

        public void CapNhatLaiDaInKhiXoaPhieuChayThanCungNgay()
        {
            dsBenhNhanIn = new ResourceWriter("BenhNhanDaIn.resources");
            for (int i = 0; i < ThanNhanTaoGlobal.DanhSachBenhNhan.Count; i++)
            {
                if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan.Equals(ThanNhanTaoGlobal.IdBenhNhanXoa))
                {
                    ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "";
                    LuuBNInDto temple = listBnIn.Find(ct => ct.idBenhNhan == ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan 
                                                      && ct.ngayLamViec.ToShortDateString().Equals(ThanNhanTaoGlobal.NgayLamViec.ToShortDateString()));
                    listBnIn.Remove(temple);
                }
            }
            for (int j = 0; j < listBnIn.Count;j++)
            {
                dsBenhNhanIn.AddResource(j.ToString(), new LuuBNInDto {idBenhNhan=listBnIn[j].idBenhNhan
                                                     ,ngayHienTai=listBnIn[j].ngayHienTai
                                                     ,ngayLamViec=listBnIn[j].ngayLamViec });
            }
            dsBenhNhanIn.Generate();
            dsBenhNhanIn.Close();
            ThanNhanTaoGlobal.IdBenhNhanXoa = -1;
        }

        public void CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTru()
        {
            LuuBNInDto temple;
            dsBenhNhanIn = new ResourceWriter("BenhNhanDaIn.resources");
            for (int i = 0; i < ThanNhanTaoGlobal.DanhSachBenhNhan.Count; i++)
            {
                if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan.Equals(ThanNhanTaoGlobal.IdBenhNhanXoa))
                {
                    foreach (DateTime dteT in ThanNhanTaoGlobal.ListNgayXoa)
                    {
                        temple = new LuuBNInDto();
                        temple = listBnIn.Find(ct => ct.idBenhNhan == ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan
                                                      && ct.ngayLamViec.ToShortDateString().Equals(dteT.ToShortDateString()));//(ThanNhanTaoGlobal.NgayLamViec.ToShortDateString()));
                        if (temple!=null)
                        {
                            ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "";
                            listBnIn.Remove(temple);
                        }
                    }
                }
            }
            ThanNhanTaoGlobal.ListNgayXoa.Clear();
            for (int j = 0; j < listBnIn.Count; j++)
            {
                dsBenhNhanIn.AddResource(j.ToString(), new LuuBNInDto
                {
                    idBenhNhan = listBnIn[j].idBenhNhan
                    ,
                    ngayHienTai = listBnIn[j].ngayHienTai
                    ,
                    ngayLamViec = listBnIn[j].ngayLamViec
                });
            }
            dsBenhNhanIn.Generate();
            dsBenhNhanIn.Close();
            ThanNhanTaoGlobal.IdBenhNhanXoa = -1;
        }

        public void CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTruTuDaTaBase()
        {
            for (int i = 0; i < ThanNhanTaoGlobal.DanhSachBenhNhan.Count; i++)
            {
                if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].IdBenhNhan.Equals(ThanNhanTaoGlobal.IdBenhNhanXoa))
                {
                    foreach (DateTime dteT in ThanNhanTaoGlobal.ListNgayXoa)
                    {
                        if (ThanNhanTaoGlobal.DanhSachBenhNhan[i].HemosolCitrat.Contains(dteT.ToShortDateString()))
                        {
                            ThanNhanTaoGlobal.DanhSachBenhNhan[i].MLTPE2000 = "";
                            ThanNhanTaoGlobal.DanhSachBenhNhan[i].HemosolCitrat=ThanNhanTaoGlobal.DanhSachBenhNhan[i].HemosolCitrat.Replace(dteT.ToShortDateString(), "");
                        }
                    }
                }
            }
            ThanNhanTaoGlobal.ListNgayXoa.Clear();
            ThanNhanTaoGlobal.IdBenhNhanXoa = -1;
        }

        #endregion

        private void TableView_ShowFilterPopup(object sender, FilterPopupEventArgs e)
        {
            if (e.Column.FieldName != "SoNhapVien") return;
            string maKhoa = ConfigurationManager.AppSettings["MaKhoa"].ToString();
            List<object> filterItems = new List<object>();
            filterItems.Add(new CustomComboBoxItem()
            {
                DisplayValue = "-- (Tất cả) --",
                EditValue = new CustomComboBoxItem()
            });
            filterItems.Add(new CustomComboBoxItem()
            {
                DisplayValue = "-- nội Khoa --",
                EditValue = CriteriaOperator.Parse(string.Format(
                "[SoNhapVien] LIKE '%{0}'", maKhoa))
            });
            filterItems.Add(new CustomComboBoxItem()
            {
                DisplayValue = "-- ngoại Khoa --",
                EditValue = CriteriaOperator.Parse(string.Format(
                "[SoNhapVien] NOT LIKE '%{0}'", maKhoa))
            });
            e.ComboBoxEdit.ItemsSource = filterItems;
        }
    }
    [Serializable()]
    public class LuuBNInDto
    {
        public int idBenhNhan { get; set; }
        public DateTime ngayHienTai { get; set; }
        public DateTime ngayLamViec { get; set; }
    }
}
